package com.gjh.ouygoing.service;

import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.HashMap;
import java.util.Map;

/**
 * 微信支付接口
 */
public interface WxPayService {
    /**
     * 生成相关订单的接口
     * @param productId
     * @return
     */
    Map<String, Object> nativePay(Long productId) throws Exception;

    /**
     * 用来解密微信端发送的这个参数
     * @param bodyMap
     */
    void processOrder(Map<String, Object> bodyMap) throws GeneralSecurityException;

    /**
     * 用来实现取消我的这个订单接口
     * @param orderNo
     */
    void cancelOrder(String orderNo) throws Exception;

    /**
     * 更具订单Id查找啊我的这个微信端的这个订单信息
     * @param orderNo
     * @return
     */
    String queryOrder(String orderNo) throws Exception;

    /**
     * 根据微信号查询我的这个查单接口
     * @param orderNo
     */
    void checkOrderStatus(String orderNo) throws Exception;

    /**
     * 根据订单号去进行订单的退款
     * @param orderNo
     * @param reason
     */
    void refund(String orderNo, String reason) throws IOException;

    /**
     * 根据订单编号查询相关的退款信息
     * @param refundNo 订单编号
     * @return
     */
    String queryRefund(String refundNo) throws IOException;

    /**
     * 处理我的这个退款单的方法
     * @param bodyMap
     */
    void reprocessRefund(HashMap bodyMap) throws GeneralSecurityException, Exception;

    /**
     * 申请下载交易账单
     * @param billDate 查询日期
     * @param type 交易账单类型
     * @return
     */
    String queryBill(String billDate, String type) throws IOException, Exception;

    /**
     * 下载excel表格的接口方法
     * @param billDate 我的这个查询的是金
     * @param type 订单的类型
     * @return
     */
    String downloadBill(String billDate, String type) throws Exception;
}
